<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
</head>

<body>
    <script>
        // await操作符
        // async函数

        // await必须在async函数中才能使用
        // await后面可以是任意值，但是一般跟Promise对象
        // ● Promise的resolve方法的值就是await值
        // let index = 0;

        // function delay(time, fn) {
        //     // 返回一个Promise对象
        //     return new Promise((resolve, reject) => {
        //         setTimeout(() => {
        //             fn();
        //             resolve(`执行的第${++index}次`);
        //         }, time)
        //     })
        // }
        // async function count() {
        //     // Promise的回调函数 中resolve()的参数
        //     // 1 没有使用then时， 参数是整个promise的返回值，需要定义变量来接收，再使用
        //     // 2 使用then时， 参数是then中处理执行成功方法的实参，需要定义形参接收，再使用
        //     let val1 = await delay(1000, function() {
        //         console.log(1);
        //     })
        //     console.log(val1);
        //     let val2 = await delay(1000, function() {
        //         console.log(2);
        //     })
        //     console.log(val2);
        //     let val3 = await delay(1000, function() {
        //         console.log(3);
        //     })
        //     console.log(val3);
        // }
        // count();
        // ● Promise的reject不会作为值返回，需要使用try...catch进行捕获



        // 只要函数名之前加上async关键字，就表明该函数内部有异步操作。 
        // 该异步操作应该返回一个Promise对象，前面用await关键字注明。 
        // 当函数执行的时候，一旦遇到await就会先返回，
        // 等到触发的异步操作完成，再接着执行函数体内后面的语句
        // async function fn() {
        //     try {
        //         var v = await getValue(10);
        //         console.log(v);
        //         var w = await getValue(20);
        //         console.log(w);
        //         var y = await getValue(200);
        //         console.log(y);
        //     } catch (e) {
        //         console.log(e)
        //     }
        // }

        // function getValue(val) {
        //     return new Promise((resolve, reject) => {
        //         setTimeout(() => {
        //             // var a = 10

        //             if (val < 100) {
        //                 resolve(val * 10);
        //             } else {
        //                 reject('传入的值太大了');
        //             }
        //         }, 2000)
        //     })
        // }
        // fn();
    </script>
</body>

</html>